import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CalculatorListener implements ActionListener {
    private JTextField JF;
    public double result = 0.0, temp;
    public int number; //用于显示第一个数字
    public String op; //用于记录当前的运算符
    //flag：1表示在运算符前，0表示在运算符后
    //IsAct：1表示在运算符前，0表示在运算符后
    public boolean flag = true, IsAct = true, IsZero = false;

    public void setJText(JTextField F) {// 接受文本框，用于监听输出
        JF = F;
    }

    public void actionPerformed(ActionEvent e) {
        String lab = e.getActionCommand(); //得到当前的按钮字符
        if (lab.equals("CE")) { //如果按下CE键，则清空计算器
            JF.setText("");
        } else if (lab.equals("+") || lab.equals("-") || lab.equals("*") || lab.equals("/")) { //按下操作符
            op = lab; //记录此次运算符
            temp = Double.valueOf(JF.getText()); //temp获取数据
            if (flag) //如果是在运算符前，result获取第一个数据
                result = temp;
            //表示已按下运算符
            flag = false;
            IsAct = false;
        } else if (lab.equals("=")) { //按下等于号
            switch (op) {
                case "+":
                    result += temp;
                    break;
                case "-":
                    result -= temp;
                    break;
                case "*":
                    result *= temp;
                    break;
                case "/":
                    if (temp == 0) {
                        IsZero = true;
                        JF.setText("The divisor cannot be zero");
                        break;
                    }
                    result /= temp;
                    break;
                case "?":
                    break;

            }
            if (!IsZero) {
                if (result % 1 == 0) //如果结果为整数
                    JF.setText((long) result + ""); //显示出整数
                else //否则显示小数点
                    JF.setText(result + "");
            }
            IsAct = false;
            flag = true; //回到初始状态
            op="?"; //删除运算符记录
        } else if (lab.equals(".")) { //假如输入小数点
            JF.setText(JF.getText() + lab);
        } else { //按下数字
            if (!IsAct || IsZero) { //加入在运算符按下以后，输入第一个数字
                JF.setText(""); //清空之前的数字
                IsAct = true; //回到初始状态
                IsZero = false;
            }
            number = Integer.valueOf(lab); //获取按下的数字
            if (JF.getText().equals("0")) //如果显示为0
                JF.setText(number + ""); //则覆盖0显示新的数字
            else //否则在已有的数字后添加数字
                JF.setText(JF.getText() + number);
            temp = Double.valueOf(JF.getText()); //temp获取数据
        }
    }
}